// 应用场景：使用app的时候， 软件会不定期更新， 那么我们怎么知道什么时候应该更新呢？
// 该函数接收两个参数分别为旧版本、新版本，当新版本高于旧版本时表明需要更新，返回true，否则返回false。
// 注意：
// 1. 版本号格式均为"X.X.X"
// 2. X∈[0,9]
// 3. 当两个版本号相同时，不需要更新
// export const _shouldUpdate = (oldVersion: string, newVersion: string) => {
//   const arr1 = oldVersion.split(".");

//   const arr2 = newVersion.split(".");

//   for (let i = 0; i < arr1.length; i++) {
//     const a = +arr1[i]
//     const b = +arr2[i]
//     if(a > b) {
//       return false
//     } else if (a < b) {
//       return true
//     } else {
//       continue
//     }
//   }

//   return arr2.length > arr1.length
// };
// const s1 = _shouldUpdate("9.1.1.2", "10.1.3");
// const s2 = _shouldUpdate("11.1.1.2", "10.1.3");
// const s3 = _shouldUpdate("10.1.1.2", "10.1.3");
// const s4 = _shouldUpdate("10.1.1.2.2.3", "10.1.1.2.2");

// console.log(s1, s2, s3, s4)
// 算法： 实现栈结构

export class Stack<T> {
  list: T[] = [];

  // 入栈
  push(value: T) {
    this.list.push(value);
  }

  // 出栈
  pop(): T {
    return this.list.pop() as T;
  }

  // 出栈
  splice(index: number, l = 1, newArr: T[] = []) {
    // 需要删除几个数据才可以获取到删除的数据位置
    const len = this.list.length - index;
    // 临时存储容器
    const arr: T[] = [];
    // 出栈临时存储容器
    const values: T[] = []
    // 向后删除数据
    new Array(len).fill("").forEach(() => {
      const s = this.list.pop();
      if (s) {
        arr.unshift(s);
      }
    });
    // 找到制定删除的数据
    new Array(l).fill("").forEach(() => {
      const s = arr.shift();
      if (s) {
        values.push(s);
      }
    });
    // 拼接插入的新数据
    newArr.reverse().forEach(v => {
      arr.unshift(v)
    })
    // 将临时数据放回去
    arr.forEach(v => {
      this.list.push(v)
    })


    return values
  }
}

const s1 = new Stack<string>();
s1.push('a')
s1.push('b')
s1.push('c')
s1.push('d')
s1.push('e')
s1.push('f')
s1.push('g')
s1.push('h')
s1.push('i')

const s = s1.splice(2, 4, ['1', '2', '3'])

console.log(s, s1.list)
// ['a', 'b','1', '2', '3', 'g', 'h', 'i']

// [ 'c', 'd', 'e', 'f']

// a b c d e f g h i
//

// 算法： 查找重复元素（必做题）

// 8901
// 8899
